﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using System.Resources;
using ICRprojekt.Properties;
using System.Windows.Forms;

namespace ICRprojekt
{
    /// <summary>
    /// Klasa služi za dohvaćanje najboljih rezultata iz baze ili iz datoteke.
    /// </summary>
    public static class Highscore
    {
        private static readonly int MAX_HIGHSCORES = 20;
        private static readonly string directory_path = @"\My Documents\Personal";

        /// <summary>
        /// Spremi rezultat kviza u tablicu hajskorova
        /// </summary>
        /// <param name="zapis">zapis rezultata</param>
        /// <returns>istinitost</returns>
        public static bool SpremiRezultatUDatoteku(HighScoreItem zapis)
        {
            // dohvati trenutnu listu
            var lista = DohvatiHighScoreIzDatoteke();
            // dodaj novi zapis
            lista.Add(zapis);
            // sortiraj listu
            lista.Sort((p, q) => p.Score.CompareTo(q.Score));
            lista.Reverse( );

            StreamWriter sw;
            // pokusaj otvorit datoteku
            try
            {
                sw = new StreamWriter ( directory_path + "\\UPITNIKhighscore.txt", false );
                sw.WriteLine ( "HIGHSCORE datoteka za Upitnik" );

                if ( lista.Count == 21 )
                    lista.RemoveAt( lista.Count - 1 );
                // zapisi novi poredak u datoteku
                for ( int i = 0 ; i < lista.Count ; i++ )
                {
                    sw.WriteLine ( lista.ElementAt ( i ).Score + " " + lista.ElementAt ( i ).Name );
                }

                sw.Flush( );
                sw.Close ( );
            }
            catch( Exception )
            {
                // ako ne uspijes napravi novu
                MessageBox.Show( "Neuspjesno zapisivanje najboljih rezultata" );
                return false;
            }
            return true;
        }

        /// <summary>
        /// Dohvat podataka iz datoteke.
        /// </summary>
        /// <returns>Lista HighScoreItema</returns>
        public static List<HighScoreItem> DohvatiHighScoreIzDatoteke()
        {
            var lista = new List<HighScoreItem> ( );
            if (File.Exists(directory_path + "\\UPITNIKhighscore.txt" ) == false )
            {
                var sw=  File.CreateText( directory_path + "\\UPITNIKhighscore.txt" );
                sw.WriteLine( "HIGHSCORE datoteka za Upitnik" );
                sw.Flush( );
                sw.Close( );
                return lista;
            }
            string redak;

            StreamReader sr = new StreamReader ( directory_path + "\\UPITNIKhighscore.txt" );
            //ignoriranje prvog retka
            sr.ReadLine( );
            // za svaki zapis
            for (int i = 0; i < MAX_HIGHSCORES; i++)
            {
                redak = sr.ReadLine();
                // provjeri ako je li kraj datoteke
                if (string.IsNullOrEmpty(redak))
                    break;
                // razlomi redak na rezultat i ime
                var zapis = redak.Trim().Split(new char[] { ' ' });
                // dodaj novi HighscoreItem u listu
                lista.Add(new HighScoreItem(zapis[1], int.Parse(zapis[0].Trim())));
            }
            sr.Close();

            return lista;
        }

        /// <summary>
        /// Dohvat podataka iz baze.
        /// </summary>
        /// <returns></returns>
        public static List<HighScoreItem> DohvatiHighScoreIzBaze( )
        {
            throw new NotImplementedException ( );
        }
    }
}
